package com.ang.propagation.t1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 * required
 * s2如果使用了 required，那么s1如果有事务，s2加入s1的事务，否则自己创建一个事物
 * <p>
 * 如果s2加入s1的事务，同时提交和回滚；
 * 如果s2自己创建事务，回滚的时候，s1不会回滚；
 */
@Component
public class RequiredService1 {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Autowired
    private RequiredService2 service2;

    //默认就是 Propagation.REQUIRED
    @Transactional
    public void trans() {
        jdbcTemplate.update("update t_user set age = ? where id = ?", 1, 1);
        service2.update();
//        int i = 1 / 0;
    }

    @Transactional
    public void transFor() {
        for (int i = 0; i < 3; i++) {
            jdbcTemplate.update("update t_user set age = ? where id = ?", i, 1);
            service2.updateFor(i);
            if (i == 2) {
                int j = 1 / 0;
            }
        }
    }
}
